import {BaseDataType} from "./BaseDataType.js";

/**
 * @description 基础数据类型String
 * @class {BaseString}
 * @extends {BaseDataType} 数据类型基类方法封装
 * @author hhx
 * @date 2024-10-22 8:52
 * @version 0.1.2
 */
class BaseString extends BaseDataType {

    /**
     * @description 字符串
     * @private
     * @type {string} 字符
     */
    _tempStr = undefined;

    /**
     * @description string数据类型 构造方法
     * @public
     * @constructor
     * @param str {string} 设置的字符串
     */
    constructor(str) {

        super();

        this._tempStr = str;
    }

    //========================== 基础属性 ==========================

    /**
     * @description 获取 字符串数据
     * @property
     * @protected
     * @return  {string} 字符串
     */
    get tempStr() {
        return this._tempStr;
    }

    /**
     * @description 设置 字符串数据
     * @property
     * @proptected
     * @param value {string} 设置的字符串
     */
    set tempStr(value) {
        this._tempStr = value;
    }

    //========================== 属性方法 ==========================

    /**
     * @description 获取字符串方法
     * @public
     * @return {string} 字符串
     */
    getTempStr() {
        return this.tempStr;
    }

    /**
     * @description 设置字符串
     * @public
     * @param value {string} 设置的字符串
     */
    setTempStr(value) {
        this.tempStr = value;
    }

    //========================== 接口 ==========================

    /**
     * @description 字符串截取方法
     * @public
     * @param indexStart {number} 截取字符初始索引
     * @param indexEnd {number} 截取字符结束索引
     * @returns {string} 截取后的字符串
     */
    substring(indexStart, indexEnd = this.tempStr.length) {
        return this.tempStr.substring(indexStart, indexEnd);
    }

    /**
     * @description 字符串合并
     * @public
     * @param  arg {string}  string类型参数列表
     * @returns {string} 合并后的字符串
     */
    concat(...arg) {
        return this.tempStr.concat(...arg);
    }

    /**
     * @description 字符串转数组
     * @public
     * @param separator {string} 以哪个分隔符分隔
     * @param limit {number} 子字符串的数量限制
     * @returns {Array} 以特定字符分隔后的数组
     */
    split(separator = ' ', limit = this.tempStr.length) {
        return this.tempStr.split(separator, limit);
    }

    /**
     * @description 是否存在某个字符
     * @public
     * @param str {string} 要判断的字符
     * @returns {number} -1 不存在  大于-1 存在
     */
    indexOf(str) {
        return this.tempStr.indexOf(str);
    }

    /**
     * @description 去除字符串两边空格
     * @public
     * @param str {string} 去空格的字符串
     * @returns {string} 去除空格后的字符串
     */
    trim(str) {
        return this.tempStr.trim();
    }

    //========================== 重载方法 ==========================

    /**
     * @description 任意类型转字符串
     * @public
     * @override
     * @return {string} 转换后的字符串
     */
    toString() {
        return super.toString(this.tempStr);
    }

    /**
     * @description 转换成对象的this值
     * @public
     * @override
     * @return {object} string对象
     */
    valueOf() {
        return super.valueOf(this.tempStr);
    }
}


